package sicnu.cs.ich.ich.ranking.service;


import sicnu.cs.ich.api.common.enums.ConfigEnum;
import sicnu.cs.ich.api.domain.dto.IchHitDTO;
import sicnu.cs.ich.api.domain.dto.IchHotDTO;
import sicnu.cs.ich.api.domain.dto.IchProvinceDTO;
import sicnu.cs.ich.api.domain.entity.Ich;
import sicnu.cs.ich.api.domain.mq.IchMQ;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.PriorityQueue;
import java.util.concurrent.ExecutionException;

/**
 * @author CaiKe
 */
public interface IIchRankingService {

    /**
     * 获取非遗热度榜中的非遗id
     */
    List<Integer> getIchRankingIds() throws InterruptedException;
    /**
     * 指定非遗热度+1
     *
     * @param id 非遗id
     */
    void ichHitIncrement(Integer ichId);
    /**
     * 指定非遗排行榜+1
     */
    void ichProvinceIncrement(IchMQ ich);
    /**
     * 指定非遗集合热度+1
     */
    void ichHitIncrement(List<Integer> ids);
    /**
     * 非遗指定类别热度+1
     */
    void ichTypeHitIncrement(Integer typeId);
    /**
     * 获取非遗类别热力榜id
     */
    int[] getIchTypeHit();
    /**
     * 手动触发非遗热力榜排序并返回
     */
    PriorityQueue<IchHitDTO> sortAndGet();
    /**
     * 加载非遗热力榜配置文件
     */
    void loadHitConfig(HashMap<ConfigEnum, String> configMap);
    /**
     * 导出非遗热力榜配置文件
     */
    HashMap<ConfigEnum, String> exportHitConfig();
    /**
     * 批量更新非遗热度
     * @param ichRankRecordList
     */
    void batchIncrementIchHot(List<IchHotDTO> ichRankRecordList);
    /**
     * 获取前多少位排行榜
     * @param num 前多少
     */
    List<IchHotDTO> getProvinceIchHotDTOs(String province , int num);
    /**
     * 助力非遗
     *
     * @param ichId 非遗id
     */
    void updateIchHit(Integer ichId);
    /**
     * 删除Redis中所有非遗点赞助力数量信息
     */
    void clearLikeNum();

}
